//package com.example.jvmandasm;
//
//import org.junit.Test;
//
//import java.lang.ref.PhantomReference;
//import java.lang.ref.ReferenceQueue;
//import java.lang.ref.SoftReference;
//import java.lang.ref.WeakReference;
//import java.util.ArrayList;
//import java.util.LinkedList;
//import java.util.List;
//
//import static org.junit.Assert.assertEquals;
//
///**
// * Example local unit test, which will execute on the development machine (host).
// *
// * @see <a href="http://d.android.com/tools/testing">Testing documentation</a>
// */
//
//public class ExampleUnitTest {
//
//
//    @Test
//    public void test(){
////        System.out.println("11111");
//
//        ArrayList list = new ArrayList();
//        while (true) {
//            list.add(new TestGC());
//            try {
//                Thread.sleep(10);
//            } catch (InterruptedException e) {
//                e.printStackTrace();
//            }
//        }
//
//
//    }
//
//    class Person{
//
//    }
//
//    @Test
//    public void addition_isCorrect() {
//        assertEquals(4, 2 + 2);
//
//
//    }
//    class TestGC{
//        byte[] bytes=new byte[300*1024];//300K
//    }
//
//    class User{
//        Integer id;
//        String name;
//
//        public User(Integer id, String name) {
//            this.id = id;
//            this.name = name;
//        }
//    }
//
//
//    //一般是不回收的，只在内存不足的时候，才回收
//    //适合缓存图片,小段音视频
//    @Test
//    public void SoftReference(){
//        User user=new User(1,"jett");
//        SoftReference<User> userSoftReference=new SoftReference<>(user);
//        user=null;
//        System.out.println(userSoftReference.get());
//        System.gc();
//        System.out.println("After gc");
//        System.out.println(userSoftReference.get());
//
//        List<byte[]> list=new LinkedList<>();
//        try{
//            for (int i = 0; i < 10000; i++) {
//                System.out.println("for=="+userSoftReference.get());
//                list.add(new byte[1024*1024*1]);
//            }
//        }catch(Exception e){
//            System.out.println("Exception=="+userSoftReference.get());
//        }finally{
//            System.out.println("Finally=="+userSoftReference.get());
//        }
//    }
//
//
//    //解决内存泄漏
//    @Test
//    public void WeakReference(){
//        User user=new User(1,"jett");
//        WeakReference<User> userWeakReference=new WeakReference<>(user);
//        user=null;
//        System.out.println(userWeakReference.get());
//        System.gc();
//        System.out.println("After gc");
//        System.out.println(userWeakReference.get());
//    }
//
//    //一般用来监听GC的动作
//    @Test
//    public void testPhantomReference(){
//        ReferenceQueue<Object> referenceQueue=new ReferenceQueue<>();
//        Object phantomObject=new Object();
//        PhantomReference phantomReference=new PhantomReference(phantomObject,referenceQueue);
//        phantomObject=null;
//        System.out.println(phantomReference.get());
//        System.out.println(referenceQueue.poll());
//        System.gc();
//        System.out.println("After gc");
//        try {
//            Thread.sleep(2000);
//        } catch (InterruptedException e) {
//            e.printStackTrace();
//        }
//        System.out.println(referenceQueue.poll());
//    }
//
//}
//
//
//
//
//
//
//
//
//
//
